'use strict';

const 
    path = require('path'),
    fs = require('mz/fs'),
    mime = require('mime')

/**
 * 处理静态资源的中间件, 传入静态资源的公用地址. 和本地静态资源的绝对路径
 * 如果client端访问静态资源,直接返回. 其他资源 next
 * @param {*} url client 端请求路径
 * @param {*} dir 本地资源绝对路径
 */

const staticFiles = (url, dir) => {
    return async (ctx, next) => {
        let rpath = ctx.request.path;
        if (rpath.startsWith(url)) {
            let fp = path.join(dir, rpath.substring(url.length));
            if (await fs.exists(fp)) {
                ctx.response.type = mime.lookup(rpath)
                ctx.response.body = await fs.readFile(fp);
            } else {
                ctx.response.status = 404;
            }
        } else {
            await next();
        }
    }
}

module.exports = staticFiles;